home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / glibmm-2.4 / proc / gmmproc < prev   
Text File  |  2006-04-20  |  6KB  |  240 lines

  1. #! /usr/bin/perl
  2. #
  3. # tools/gmmproc.  Generated from gmmproc.in by configure.
  4. #
  5. ######################################################################
  6. # gmmproc (version 4)
  7. ######################################################################
  8. #
  9. # *** WARNING: Only modify gmmproc.in. gmmproc is built. ***
  10. #
  11. # Copyright 2001, Karl Einar Nelson, Murray Cumming
  12. #
  13. # This program is free software; you can redistribute it and/or modify
  14. # it under the terms of the GNU General Public License as published by
  15. # the Free Software Foundation; either version 2 of the License, or 
  16. # (at your option) any later version.
  17. #
  18. # This program is distributed in the hope that it will be useful,
  19. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  21. # GNU General Public License for more details. 
  22. #
  23. # You should have received a copy of the GNU General Public License
  24. # along with this program; if not, write to the Free Software
  25. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  26. #
  27. #
  28. # 'classes':
  29. # WrapParser: steps through .hg and .ccg files, outputting appropriate m4 code with Outputter.
  30. # Outputter: Used by WrapParser to ouput wrapper code. Ouputs *.g1 temp file and uses m4 to generate *.g2 from it. Then outputs .h and .cc files.
  31. # Function: Contains information about C and C++ functions and signals.
  32. #
  33. ######################################################################
  34.  
  35. ########################## 'main()' ##################################
  36.  
  37. $main::procdir;
  38. $main::m4path;
  39.  
  40. BEGIN {
  41.   # get prefix info from configure
  42.   my $prefix = "/usr";
  43.   my $exec_prefix = "${prefix}";
  44.   my $libdir = "${exec_prefix}/lib";
  45.  
  46.   # This line must match the install directory in m4/Makefile.am
  47.   $main::procdir = "$libdir/glibmm-2.4/proc";
  48.   $main::m4path = "m4";
  49.  
  50.   # This line must match install dir from pm/Makefile.am
  51.   push @INC,"$main::procdir/pm";
  52. }
  53.  
  54. use strict;
  55. use warnings;
  56.  
  57. use Output;
  58. use WrapParser;
  59.  
  60. # initialize globals 
  61. @main::macrodirs = ();
  62. $main::srcdir = ".";
  63. $main::defsdir = ".";
  64. $main::source = "";
  65. $main::debug = 0;
  66. $main::unwrapped = 1;
  67.  
  68. { # checking the environment for a set variable can trigger a warning
  69.   no warnings;
  70.   $main::debug = 1 if ($ENV{'GMMPROC_DEBUG'} eq 1);
  71. }
  72.  
  73. # prototypes
  74. sub parse_command_line_args();
  75.  
  76.  
  77. #main()
  78. parse_command_line_args();
  79.  
  80. my $objOutputter = &Output::new($main::m4path, \@main::macrodirs);
  81. my $objWrapParser = &WrapParser::new($objOutputter);
  82.  
  83. $$objWrapParser{srcdir} = $main::srcdir;
  84. $$objWrapParser{defsdir} = $main::defsdir;
  85. $$objWrapParser{source} = $main::source;
  86. $$objOutputter{source} = $main::source;
  87. $$objOutputter{destdir} = $ARGV[1];
  88.  
  89. # Merge the C docs, e.g. gtk_docs.xml
  90.  
  91. # Suck the whole file into one big string, breaking it into tokens:
  92. $objWrapParser->read_file($main::srcdir, $main::source);
  93.  
  94. # Parse output 
  95. $objWrapParser->parse_and_build_output();
  96.  
  97. # Write out *.g1 temporary file:
  98. $objOutputter->output_temp_g1($$objWrapParser{module}); # e.g. "gtk"
  99.  
  100. # Execute m4 to get *.g2 file:
  101. {
  102.   my $exitcode = $objOutputter->make_g2_from_g1();
  103.   if ($exitcode != 0)
  104.   {
  105.     if (!$main::debug)
  106.     {
  107.       $objOutputter->remove_temp_files();
  108.     }
  109.     print STDERR "m4 failed with exit code $exitcode.  Aborting...\n";
  110.     exit ($exitcode);
  111.   }
  112. }
  113.  
  114. # Section out the resulting output
  115. $objOutputter->write_sections_to_files();
  116.  
  117. # Remove temp files.
  118. if (!$main::debug)
  119. {
  120.   $objOutputter->remove_temp_files();
  121. }
  122.  
  123. #Warn about any unwrapped function/signals:
  124. if ($main::unwrapped)
  125.   my @unwrapped = GtkDefs::get_unwrapped();
  126.   if (@unwrapped)
  127.   {
  128.     no warnings;
  129.  
  130.     my @methods =
  131.       grep {$$_{entity_type} eq "method" & $$_{c_name}!~/^_/ } @unwrapped;
  132.     my @signals =
  133.       grep {$$_{entity_type} eq "signal"} @unwrapped;
  134.     my @properties =
  135.       grep {$$_{entity_type} eq "property"} @unwrapped;
  136.  
  137.     if (@methods)
  138.     { 
  139.       print "Unwrapped functions:\n";
  140.       map { print "  $$_{c_name}\n"} @methods;
  141.     }
  142.     if (@properties)
  143.     { 
  144.       print "Unwrapped properties:\n";
  145.       map { print "  $$_{class}::$$_{name}\n"} @properties;
  146.     }
  147.     if (@signals)
  148.     { 
  149.       print "Unwrapped signals:\n";
  150.       map { print "  $$_{class}::$$_{name}\n"} @signals;
  151.     }
  152.   }
  153. }
  154.  
  155. # end of program
  156. exit();
  157.  
  158.  
  159. ####################################################################
  160.  
  161.  
  162. sub print_usage()
  163. {
  164.   print
  165. 'Usage: gmmproc [options] name srcdir destdir
  166.   -h 
  167.   --help      This usage message.
  168.  
  169.   --doc       Produces a header file for documentation.  (FIXME)
  170.  
  171.   --debug     Leave intermediate output arround for analysis.
  172.               Alternatively, set GMMPROC_DEBUG=1 in the environment.
  173.  
  174.   --unwrapped Warn about possible unwrapped functions.
  175.  
  176.   --defs dir  Change the directory to seach for defs.
  177.  
  178.   -I dir      Specify the directory with m4 files.
  179.  
  180.  
  181. Note: This will read srcdir/name.{hg,ccg} file and generates destdir/name.cc
  182. ';
  183.   exit (1);
  184. }
  185.  
  186. # void parse_command_line_args()
  187. sub parse_command_line_args()
  188. {
  189.   print_usage() if ($#ARGV == -1);
  190.   
  191.   while ($#ARGV != -1)
  192.   {
  193.     $_ = shift @ARGV;
  194.  
  195.     if (/^-/)
  196.     {
  197.       print_usage() if ( /^--help/);
  198.       print_usage() if ( /^-h/);
  199.       if (/^-I/)
  200.       {
  201.         push @main::macrodirs, shift @ARGV;
  202.       }
  203.       elsif (/^--unwrapped/)
  204.       {
  205.         $main::unwrapped = 1;
  206.       }
  207.       elsif (/^--defs/)
  208.       {
  209.         $main::defsdir = shift @ARGV;
  210.       }
  211.       elsif (/^--debug/)
  212.       {
  213.         $main::debug = 1;
  214.       }
  215.       else
  216.       {
  217.         print "unknown parameter $_\n";
  218.       }
  219.       next;
  220.     }
  221.  
  222.     last;
  223.   }
  224.  
  225.   # we already have one argument
  226.  
  227.   if ($#ARGV != 1)
  228.   {
  229.     print STDERR "Invalid number of arguments (", $#ARGV+2, ")\n";
  230.     print_usage();
  231.   }
  232.  
  233.   $main::srcdir = $ARGV[0];
  234.   $main::source = $_;
  235.  
  236.   push @main::macrodirs,"$main::procdir/m4";
  237. }
  238.  
  239.